import numpy as mynp
import random

# 列表测试类
class listTest(object):
  def __init__(self) -> None:
    
    #测试生成 节点链接二维列表 所用参数 节点数
    self.nodeCounter = 50   # 节点个数
    self.linkGroup=[]       # 节点链接二维列表

  #测试列表和字典的用法
  def TestListAndDict(self):
    #测试列表和字典的用法
    timeOffset=32
    inputVector = {'timeOffset':timeOffset}
    inputVector[3]=6   # 并非下标，而是键值
    print(inputVector['timeOffset'])

    result = []
    result.append(inputVector[3])
    #result.append(inputVector[str(toID)])
    result.append(inputVector['timeOffset'])
    print(result)
 
  #测试for循环range
  def TestRange(self,step,right,left = 0):
    for i in range(left,right,step):
      print(i)
      i = i + 2       # 循环内改变i值不影响下一次循环？

  #生成一个固定链接范围的节点链接列表组合
  def TestCreatListGroup(self,myRange,myCell):
    #myRange代表用到的节点个数，myCell代表单个节点链接范围半径
    connectRange = myCell
    selfnodeCount = myRange
    
    for i in range(selfnodeCount):
        connects = []
        if i < connectRange :
            for j in range(0,i + connectRange + 1):
                if j != i:connects.append(j)
        elif i >= selfnodeCount - connectRange:
            for j in range(i - connectRange,selfnodeCount):
                if j != i:connects.append(j)
        else:
            for j in range(i - connectRange, i + connectRange + 1, 1):
                if j != i:connects.append(j)
        #print(connects,i)
        self.linkGroup.append(connects)
    print(self.linkGroup)

  #生成一个随机链接范围的节点链接列表组合
  def TestCreatListGroupRandom(self,selfnodeCount,Linkrange=[3,3]):
    #selfnodeCount代表用到的节点个数，Linkrange代表单个节点链接范围半径
    
    connectRangeMin = Linkrange[0]
    connectRangeMax = Linkrange[1]
    
    for i in range(selfnodeCount):
      rangeValue = random.randint(connectRangeMin, connectRangeMax)
      #然后按照范围进行添加，添加后是单向的，之后再检查，删除单向的
      connects = []
      for j in range(i - rangeValue, i + rangeValue + 1, 1):
          if j >= 0 and j < selfnodeCount and i != j:
            connects.append(j)
      self.linkGroup.append(connects)
        
        #这就获得了所有单向的连接，然后将删除不能双向奔赴的
    for i in range(selfnodeCount):
        for j in range(len(self.linkGroup[i]) - 1, -1, -1):
            if i in self.linkGroup[self.linkGroup[i][j]]:
                    #有，那就不用动了
                pass
            else:
                del self.linkGroup[i][j]
    return self.linkGroup

  #列表排序算法sort测试
  def ListSort(self,linkGroup):
    linkGroup[3].sort()
    print(linkGroup[3])
    print(linkGroup[3][1:-2])

  #一个列表记录函数，用作回调
  def ListRecord(self,stream,linkgroup):
      stream.write(str(linkgroup))
      stream.write('\n')

  #一个列表读取函数，用作回调
  def ListRead(self,filename):
      content = filename.readlines()
      lastParitition = 0
      for i in range(len(content)):
          if content[i].find('******') != -1:
              lastParitition = i
      for i in range(lastParitition + 1, len(content), 1):
          contents = content[i]
      return contents
 


